home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / Boxer / TZUtils / palmpqa.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-06-23  |  2.4 KB  |  124 lines

  1. #define IGNORE_STDIO_STUBS
  2. #define __string_h
  3.  
  4. #ifdef OLDGCC
  5.  
  6. #include <Common.h>
  7. #include <System/SysAll.h>
  8. #include <UI/UIAll.h>
  9. #include <Unix/sys_types.h>
  10.  
  11. #else
  12.  
  13. #include <PalmOS.h>
  14. #include <PalmCompatibility.h>
  15. #include <Unix/sys_types.h>
  16.  
  17. #endif
  18.  
  19. #include "stringil.h"
  20. #include "stdio2.h"
  21.  
  22. char pqatop[] = { 0xca, 0xb1, 0x90, 0x04, 0x44, 0x21 };
  23.  
  24. char pqahead[] = {
  25.   'l', 'n', 'c', 'h',
  26.   0, 3, 0x80, 1,
  27.   0, 1, '1', 0,
  28.   0, 1, 'X', 0,
  29.   0, 0, 0, 0
  30. };
  31.  
  32. char pqatwo[] = {
  33.   0, 0, 0, 16,                  /*url offset */
  34.   0, 1,                         /* url length */
  35.   0, 0, 0, 18,                  /*html offset */
  36.   0, 1,                         /* html length */
  37.   4, 1,                         /* content, compression */
  38.   0, 0,
  39.   'X', 0,
  40.  
  41. };
  42.  
  43. char bbuf[512];
  44.  
  45. int MakePQA(char *url)
  46. {
  47.   LocalID lid, aiid;
  48.   UInt16 num, attr;
  49.   UInt32 asz;
  50.   DmOpenRef db;
  51.   void *ap, *xp;
  52.   char *c = url, *d = bbuf;
  53.   int len = 1, count = 7, i;
  54.  
  55.   lid = DmFindDatabase(0, "X.pqa");
  56.   if (lid)
  57.     DmDeleteDatabase(0, lid);
  58.   DmCreateDatabase(0, "X.pqa", 'clpr', 'pqa ', 0);
  59.   lid = DmFindDatabase(0, "X.pqa");
  60.   attr = 0x200;
  61.   DmSetDatabaseInfo(0, lid, NULL, &attr, NULL, NULL, NULL,
  62.                     NULL, NULL, NULL, NULL, NULL, NULL);
  63.   WinDrawChars("/", 1, 150, 0);
  64.   db = DmOpenDatabase(0, lid, dmModeReadWrite);
  65.   asz = 20;
  66.   WinDrawChars("\\", 1, 155, 0);
  67.  
  68.   ap = DmNewHandle(db, asz);
  69.   aiid = MemHandleToLocalID(ap);
  70.   xp = MemHandleLock(ap);
  71.   DmWrite(xp, 0, pqahead, 20);
  72.   MemHandleUnlock(ap);
  73.   DmSetDatabaseInfo(0, lid, NULL, NULL, NULL, NULL, NULL, NULL,
  74.                     NULL, &aiid, NULL, NULL, NULL);
  75.  
  76.   num = 0xffff;
  77.   ap = DmNewRecord(db, &num, 1024);
  78.   xp = MemHandleLock(ap);
  79.  
  80.   memset(bbuf, 0, 512);
  81.  
  82. #define    putbits(num,val) \
  83. { \
  84.   i = (num); \
  85.   while( --i >= 0 ) { \
  86.     if ( (1 << i) & (val) ) \
  87.       *d |= 1 << count; \
  88.     if( count-- == 0 ) { \
  89.       count = 7; len++; d++; \
  90.     } \
  91.   }   \
  92. }
  93.  
  94.   while (*c) {
  95.     if (*c >= 'a' && *c <= 'z')
  96.       putbits(5, *c + 6 - 'a')
  97.     else if (*c == ' ')
  98.       putbits(5, 5)
  99.     else {
  100.       putbits(5, 2)
  101.       putbits(8, *c)
  102.     }
  103.     c++;
  104.   }
  105.  
  106.   putbits(5, 0);
  107.   putbits(5, 29);
  108.   putbits(5, 0);
  109.   putbits(5, 1);
  110.   putbits(8, 0x71);
  111.  
  112.   pqatwo[11] = len + 6;
  113.  
  114.   DmWrite(xp, 0, pqatwo, 18);
  115.   DmWrite(xp, 18, pqatwo, 6);
  116.   DmWrite(xp, 18 + 6, bbuf, len);
  117.  
  118.   MemHandleUnlock(ap);
  119.   DmResizeRecord(db, num, len + 18 + 6);
  120.   DmReleaseRecord(db, num, false);
  121.   DmCloseDatabase(db);
  122.   return 0;
  123. }
  124.